virtualenvでAnsibleのバージョンを切り替える
渡辺です。 そろそろ冬が終わりそうです・・・。
ツールのバージョンアップ時、後方互換性については悩ましい問題です。 Ansibleも同様で、Ansible2.2あたりでだいぶ落ち着いたとはいえ、作成したPlaybookは動作していた時期のバージョンに切り替えて実行するのが無難でしょう。
以前、pyenv-virtualenvを使い、Ansibleのバージョンを切り替える方法を紹介しました(pyenv-virtualenvでAnsible2系とAnsible1系を使い分ける)。 先日、virtualenvとvirtualenvwrapperを使う方法に替えてみたので、手順を紹介します。
グローバル環境のAnsibleをアンインストール
AnsibleはPythonのライブラリとしてインストールします。 グローバル環境のPythonにAnsibleが含まれていると予期せぬ動作を引き起こす可能性があるので、はじめにアンインストールしておきましょう。
$ sudo pip uninstall ansible
MacOSでbrewでインストールされていれば、同様にアンインストールします。
$ brew uninstall ansible --force
virtualenvのインストール
virtualenvをpipでインストールします。
$ pip install virtualenv
virtualenvでは、プロジェクトディレクトリ毎に環境を作成します。 今回はAnsibleのバージョン切り替えだけが目的なのでプロジェクト毎は少し冗長です。 virtualenvwrapperを追加し、グローバル環境のPythonを簡単に切り替えられるようにしましょう。
$ pip install virtualenvwrapper
次の行を.bashrc
を追加し、virtualenvwrapperを有効化します。
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh fi
Ansible環境の作成
mkvirtualenv
コマンドを実行し、ansibleという名前で、仮想環境を作成します。
$ mkvirtualenv ansible New python executable in /Users/shuji/.virtualenvs/ansible/bin/python Installing setuptools, pip, wheel...done. virtualenvwrapper.user_scripts creating /Users/shuji/.virtualenvs/ansible/bin/predeactivate virtualenvwrapper.user_scripts creating /Users/shuji/.virtualenvs/ansible/bin/postdeactivate virtualenvwrapper.user_scripts creating /Users/shuji/.virtualenvs/ansible/bin/preactivate virtualenvwrapper.user_scripts creating /Users/shuji/.virtualenvs/ansible/bin/postactivate virtualenvwrapper.user_scripts creating /Users/shuji/.virtualenvs/ansible/bin/get_env_details
仮想環境の切り替えは、workon
コマンドで行います。
workon
コマンドを引数無しで実行すると、定義済みの環境の一覧が表示されます。
$ workon ansible
workon
コマンドで環境名を指定して、環境を切り替えます。
$ workon ansible
環境を切り替えたならば、Ansibeをインストールします。
(ansible) $ pip install ansible (ansible) $ ansible --version ansible 2.2.1.0 config file = configured module search path = Default w/o overrides
Ansibleの最新バージョンがインストールされました。
旧バージョンのAnsibleをインストールする
Ansible2.1の環境を作成します。
$ mkvirtualenv ansible2.1 $ workon ansible2.1 (ansible2.1) $ pip install ansible==2.1.4 (ansible2.1) $ ansible --version ansible 2.1.4.0 config file = configured module search path = Default w/o overrides
仮想環境を抜ける
環境を抜けるには、deactivate
コマンドを実行します。
(ansible2.1) $ deactivate $ ansible --version -bash: ansible: command not found
まとめ
pyenvを使うとPython自体のバージョンも管理する事ができます。 Python自体はグローバル環境のバージョンでよい場合、virtualenvの方がお手軽ですね。
また、仮想環境の名前がシェルに表示されるところもポイントです♪